<?php


namespace app\api\controller\clothmaking;

use app\api\library\ConstStatus;
use app\common\controller\BaseApi;

use think\Request;
// 引入 FastAdmin 的数据库类或其他你正在使用的数据库类库  
use think\Db;
use app\admin\model;


class BoilerPlc extends BaseApi
{

    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];


    public function index()
    {
        print("hello world");
    }
    public function syncFromPlc()
    {
        // URL 地址  
        $url = 'http://q1461290u2.vicp.fun/tank/records?batchId=text1&id=577'; // 替换为实际的 URL  

        // 从 URL 获取 JSON 数据  
        $jsonData = file_get_contents($url);  

        // 检查是否成功获取数据  
        if ($jsonData === FALSE) {  
            die('Error occurred while fetching data from URL');  
        }  

        // 假设这是你的 JSON 数据，但已经简化为只包含 info 部分  

		
       

        // 将 JSON 数据解码为关联数组  
        $dataArray = json_decode($jsonData, true);

        $objectsArray = [];  
        foreach ($dataArray['list'] as &$item) {
            // 确保 info 键存在且为数组类型  
            if (!isset($item['info']) || !is_array($item['info'])) {
                die('Invalid JSON data format');
            }
            $dateTime = new \DateTime($item['time']);
            // 获取Unix时间戳（秒级）  
            $updatetime = $dateTime->getTimestamp();

            $plcrecordid = $item['id'];

            $plcrecord = \app\admin\model\ClothmakingBoilerPlc::where('plcrecordid', $plcrecordid)->find();
            if ($plcrecord) {
                continue;
            }
            // 遍历 info 的子项 a1 和 a2
             
            foreach ($item['info'] as $alias => $deviceData) {

                $deviceData= array_change_key_case($deviceData, CASE_LOWER);
                //var_dump($deviceData);
                //return;
                $record = \app\admin\model\clothmaking_boiler\Boiler::where('alias', $alias)->find();
                $boiler_id = 0;
                if ($record) {
                    // 如果找到了记录，返回id字段值  
                    $boiler_id = $record->id;
                } else {
                    // 如果没有找到记录，则添加新记录  
                    $data = [
                        'alias' => $alias,
                        'raw_id' => 0,
                        'volume' => 0,
                        'remaining' => 0
                    ];

                    // 使用模型插入新记录并获取插入的ID  
                    $newRecord = \app\admin\model\clothmaking_boiler\Boiler::create($data);
                    $$boiler_id = $newRecord->id;
                };
                // 为每个子项的子项构建数据数组  
                $dataToInsert = [
                    'boiler_id' => $boiler_id, // 这里应该根据实际情况来设置 batch_id 的值  
                    'updatetime' => $updatetime,
                    'createtime' => time(),
                    'plcrecordid' => $plcrecordid
                    //'father_id' => $alias, // a1 或 a2  
                    //'data_time' => date('Y-m-d H:i:s'), // 当前时间  
                    // 使用模型查询记录  
                ];


                $fields = \app\admin\model\ClothmakingBoilerPlc::getTableFields();  
           
                // 遍历子项的子项（即 a1 或 a2 的具体数据）  
                foreach ($fields as $fieldName ) {
                    $lowerFieldName=strtolower($fieldName);

                    
                    if(isset($deviceData[$lowerFieldName]))
                    {
                    // 假设数据库表字段名与 JSON 键名相同  
                     $dataToInsert[$fieldName] = $deviceData[$lowerFieldName];
                     
                    }
                   
                }

                $newPlcRecord =\app\admin\model\ClothmakingBoilerPlc::create($dataToInsert);
                $objectsArray[]=$newPlcRecord ;
                //var_dump(json_encode($dataToInsert));
               // return;
                // 插入数据到数据库（假设表名为 device_info_details）  
                // Db::name('device_info_details')->insert($dataToInsert);  
            }

        }
       return parent::response($objectsArray,ConstStatus::CODE_SUCCESS);
        // 在实际应用中，你应该添加错误处理和日志记录  
        // 例如：捕获 json_decode 可能抛出的异常，检查数据库操作是否成功等

    }
}
